# -*- coding: utf-8 -*-
BUFFER_REPLACEMENT_CODEPOINT_DEFAULT = r"""65533"""
LANGUAGE_INVALID = r"""0"""
OT_LAYOUT_DEFAULT_LANGUAGE_INDEX = r"""65535"""
OT_LAYOUT_NO_FEATURE_INDEX = r"""65535"""
OT_LAYOUT_NO_SCRIPT_INDEX = r"""65535"""
OT_LAYOUT_NO_VARIATIONS_INDEX = r"""4294967295"""
OT_VAR_NO_AXIS_INDEX = r"""4294967295"""
SET_VALUE_INVALID = r"""4294967295"""
UNICODE_MAX_DECOMPOSITION_LEN = r"""19"""
VERSION_MAJOR = r"""1"""
VERSION_MICRO = r"""2"""
VERSION_MINOR = r"""7"""
VERSION_STRING = r"""1.7.2"""

def blob_create(data=None, length=None, mode=None, user_data=None, destroy=None):
    """    Creates a new "blob" object wrapping @data.  The @mode parameter is used
    to negotiate ownership and lifecycle of @data.
    @param data: Pointer to blob data.
    @param length: Length of @data in bytes.
    @param mode: Memory mode for @data.
    @param user_data: Data parameter to pass to @destroy.
    @param destroy: Callback to call when @data is not needed anymore.
    @type data: str
    @type length: int
    @type mode: memory_mode_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: New blob, or the empty blob if something failed or if @length is zero.  Destroy with hb_blob_destroy().
    @rtype: blob_t
    """
    return object

def blob_create_sub_blob(parent=None, offset=None, length=None):
    """    Returns a blob that represents a range of bytes in @parent.  The new
    blob is always created with %HB_MEMORY_MODE_READONLY, meaning that it
    will never modify data in the parent blob.  The parent data is not
    expected to be modified, and will result in undefined behavior if it
    is.
    
    Makes @parent immutable.
    @param parent: Parent blob.
    @param offset: Start offset of sub-blob within @parent, in bytes.
    @param length: Length of sub-blob.
    @type parent: blob_t
    @type offset: int
    @type length: int
    @returns: New blob, or the empty blob if something failed or if @length is zero or @offset is beyond the end of @parent's data.  Destroy with hb_blob_destroy().
    @rtype: blob_t
    """
    return object

def blob_destroy(blob=None):
    """    Descreases the reference count on @blob, and if it reaches zero, destroys
    @blob, freeing all memory, possibly calling the destroy-callback the blob
    was created for if it has not been called already.
    
    See TODO:link object types for more information.
    @param blob: a blob.
    @type blob: blob_t
    @returns: 
    @rtype: None
    """
    return object

def blob_get_data(blob=None, length=None):
    """    
    @param blob: a blob.
    @type blob: blob_t
    @type length: int
    @rtype: None
    """
    return object

def blob_get_data_writable(blob=None, length=None):
    """    Tries to make blob data writable (possibly copying it) and
    return pointer to data.
    
    Fails if blob has been made immutable, or if memory allocation
    fails.
    @param blob: a blob.
    @param length: output length of the writable data.
    @type blob: blob_t
    @type length: int
    @rtype: None
    """
    return object

def blob_get_empty():
    """    Returns the singleton empty blob.
    
    See TODO:link object types for more information.
    @returns: the empty blob.
    @rtype: blob_t
    """
    return object

def blob_get_length(blob=None):
    """    
    @param blob: a blob.
    @type blob: blob_t
    @returns: the length of blob data in bytes.
    @rtype: int
    """
    return object

def blob_get_user_data(blob=None, key=None):
    """    
    @param blob: a blob.
    @param key: key for data to get.
    @type blob: blob_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def blob_is_immutable(blob=None):
    """    
    @param blob: a blob.
    @type blob: blob_t
    @returns: TODO
    @rtype: bool_t
    """
    return object

def blob_make_immutable(blob=None):
    """    
    @param blob: a blob.
    @type blob: blob_t
    @returns: 
    @rtype: None
    """
    return object

def blob_reference(blob=None):
    """    Increases the reference count on @blob.
    
    See TODO:link object types for more information.
    @param blob: a blob.
    @type blob: blob_t
    @returns: @blob.
    @rtype: blob_t
    """
    return object

def blob_set_user_data(blob=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param blob: a blob.
    @param key: key for data to set.
    @param data: data to set.
    @param destroy: callback to call when @data is not needed anymore.
    @param replace: whether to replace an existing data with the same key.
    @type blob: blob_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def buffer_add(buffer=None, codepoint=None, cluster=None):
    """    Appends a character with the Unicode value of @codepoint to @buffer, and
    gives it the initial cluster value of @cluster. Clusters can be any thing
    the client wants, they are usually used to refer to the index of the
    character in the input text stream and are output in
    #hb_glyph_info_t.cluster field.
    
    This function does not check the validity of @codepoint, it is up to the
    caller to ensure it is a valid Unicode code point.
    @param buffer: an #hb_buffer_t.
    @param codepoint: a Unicode code point.
    @param cluster: the cluster value of @codepoint.
    @type buffer: buffer_t
    @type codepoint: codepoint_t
    @type cluster: int
    @returns: 
    @rtype: None
    """
    return object

def buffer_add_codepoints(buffer=None, text=None, text_length=None, item_offset=None, item_length=None):
    """    Appends characters from @text array to @buffer. The @item_offset is the
    position of the first character from @text that will be appended, and
    @item_length is the number of character. When shaping part of a larger text
    (e.g. a run of text from a paragraph), instead of passing just the substring
    corresponding to the run, it is preferable to pass the whole
    paragraph and specify the run start and length as @item_offset and
    @item_length, respectively, to give HarfBuzz the full context to be able,
    for example, to do cross-run Arabic shaping or properly handle combining
    marks at stat of run.
    
    This function does not check the validity of @text, it is up to the caller
    to ensure it contains a valid Unicode code points.
    @param buffer: a #hb_buffer_t to append characters to.
    @param text: an array of Unicode code points to append.
    @param text_length: the length of the @text, or -1 if it is %NULL terminated.
    @param item_offset: the offset of the first code point to add to the @buffer.
    @param item_length: the number of code points to add to the @buffer, or -1 for the               end of @text (assuming it is %NULL terminated).
    @type buffer: buffer_t
    @type text_length: int
    @type item_offset: int
    @type item_length: int
    @returns: 
    @rtype: None
    """
    return object

def buffer_add_latin1(buffer=None, text=None, text_length=None, item_offset=None, item_length=None):
    """    Similar to hb_buffer_add_codepoints(), but allows only access to first 256
    Unicode code points that can fit in 8-bit strings.
    
    <note>Has nothing to do with non-Unicode Latin-1 encoding.</note>
    @param buffer: an #hb_buffer_t.
    @param text: an array of UTF-8               characters to append.
    @param text_length: the length of the @text, or -1 if it is %NULL terminated.
    @param item_offset: the offset of the first character to add to the @buffer.
    @param item_length: the number of characters to add to the @buffer, or -1 for the               end of @text (assuming it is %NULL terminated).
    @type buffer: buffer_t
    @type text_length: int
    @type item_offset: int
    @type item_length: int
    @returns: 
    @rtype: None
    """
    return object

def buffer_add_utf16(buffer=None, text=None, text_length=None, item_offset=None, item_length=None):
    """    See hb_buffer_add_codepoints().
    
    Replaces invalid UTF-16 characters with the @buffer replacement code point,
    see hb_buffer_set_replacement_codepoint().
    @param buffer: an #hb_buffer_t.
    @param text: an array of UTF-16 characters to append.
    @param text_length: the length of the @text, or -1 if it is %NULL terminated.
    @param item_offset: the offset of the first character to add to the @buffer.
    @param item_length: the number of characters to add to the @buffer, or -1 for the               end of @text (assuming it is %NULL terminated).
    @type buffer: buffer_t
    @type text_length: int
    @type item_offset: int
    @type item_length: int
    @returns: 
    @rtype: None
    """
    return object

def buffer_add_utf32(buffer=None, text=None, text_length=None, item_offset=None, item_length=None):
    """    See hb_buffer_add_codepoints().
    
    Replaces invalid UTF-32 characters with the @buffer replacement code point,
    see hb_buffer_set_replacement_codepoint().
    @param buffer: an #hb_buffer_t.
    @param text: an array of UTF-32 characters to append.
    @param text_length: the length of the @text, or -1 if it is %NULL terminated.
    @param item_offset: the offset of the first character to add to the @buffer.
    @param item_length: the number of characters to add to the @buffer, or -1 for the               end of @text (assuming it is %NULL terminated).
    @type buffer: buffer_t
    @type text_length: int
    @type item_offset: int
    @type item_length: int
    @returns: 
    @rtype: None
    """
    return object

def buffer_add_utf8(buffer=None, text=None, text_length=None, item_offset=None, item_length=None):
    """    See hb_buffer_add_codepoints().
    
    Replaces invalid UTF-8 characters with the @buffer replacement code point,
    see hb_buffer_set_replacement_codepoint().
    @param buffer: an #hb_buffer_t.
    @param text: an array of UTF-8               characters to append.
    @param text_length: the length of the @text, or -1 if it is %NULL terminated.
    @param item_offset: the offset of the first character to add to the @buffer.
    @param item_length: the number of characters to add to the @buffer, or -1 for the               end of @text (assuming it is %NULL terminated).
    @type buffer: buffer_t
    @type text_length: int
    @type item_offset: int
    @type item_length: int
    @returns: 
    @rtype: None
    """
    return object

def buffer_allocation_successful(buffer=None):
    """    Check if allocating memory for the buffer succeeded.
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: %true if @buffer memory allocation succeeded, %false otherwise.
    @rtype: bool_t
    """
    return object

def buffer_append(buffer=None, source=None, start=None, end=None):
    """    Append (part of) contents of another buffer to this buffer.
    @param buffer: an #hb_buffer_t.
    @param source: source #hb_buffer_t.
    @param start: start index into source buffer to copy.  Use 0 to copy from start of buffer.
    @param end: end index into source buffer to copy.  Use (unsigned int) -1 to copy to end of buffer.
    @type buffer: buffer_t
    @type source: buffer_t
    @type start: int
    @type end: int
    @returns: 
    @rtype: None
    """
    return object

def buffer_clear_contents(buffer=None):
    """    Similar to hb_buffer_reset(), but does not clear the Unicode functions and
    the replacement code point.
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: None
    """
    return object


class buffer_cluster_level_t:
    """"""
    MONOTONE_GRAPHEMES = 0
    MONOTONE_CHARACTERS = 1
    CHARACTERS = 2
    DEFAULT = 0


class buffer_content_type_t:
    """"""
    INVALID = 0
    UNICODE = 1
    GLYPHS = 2

def buffer_create():
    """    Creates a new #hb_buffer_t with all properties to defaults.
    @returns: A newly allocated #hb_buffer_t with a reference count of 1. The initial reference count should be released with hb_buffer_destroy() when you are done using the #hb_buffer_t. This function never returns %NULL. If memory cannot be allocated, a special #hb_buffer_t object will be returned on which hb_buffer_allocation_successful() returns %false.
    @rtype: buffer_t
    """
    return object

def buffer_deserialize_glyphs(buffer=None, buf=None, buf_len=None, end_ptr=None, font=None, format=None):
    """    
    @param buffer: an #hb_buffer_t buffer.
    @type buffer: buffer_t
    @type buf_len: int
    @type end_ptr: str
    @type font: font_t
    @type format: buffer_serialize_format_t
    @returns: 
    @rtype: bool_t
    """
    return object

def buffer_destroy(buffer=None):
    """    Deallocate the @buffer.
    Decreases the reference count on @buffer by one. If the result is zero, then
    @buffer and all associated resources are freed. See hb_buffer_reference().
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_diff(buffer=None, reference=None, dottedcircle_glyph=None, position_fuzz=None):
    """    If dottedcircle_glyph is (hb_codepoint_t) -1 then %HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
    and %HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT are never returned.  This should be used by most
    callers if just comparing two buffers is needed.
    @type buffer: buffer_t
    @type reference: buffer_t
    @type dottedcircle_glyph: codepoint_t
    @type position_fuzz: int
    @returns: 
    @rtype: buffer_diff_flags_t
    """
    return object


class buffer_diff_flags_t:
    """"""
    EQUAL = 0
    CONTENT_TYPE_MISMATCH = 1
    LENGTH_MISMATCH = 2
    NOTDEF_PRESENT = 4
    DOTTED_CIRCLE_PRESENT = 8
    CODEPOINT_MISMATCH = 16
    CLUSTER_MISMATCH = 32
    GLYPH_FLAGS_MISMATCH = 64
    POSITION_MISMATCH = 128


class buffer_flags_t:
    """"""
    DEFAULT = 0
    BOT = 1
    EOT = 2
    PRESERVE_DEFAULT_IGNORABLES = 4

def buffer_get_cluster_level(buffer=None):
    """    
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: buffer_cluster_level_t
    """
    return object

def buffer_get_content_type(buffer=None):
    """    see hb_buffer_set_content_type().
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The type of @buffer contents.
    @rtype: buffer_content_type_t
    """
    return object

def buffer_get_direction(buffer=None):
    """    See hb_buffer_set_direction()
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The direction of the @buffer.
    @rtype: direction_t
    """
    return object

def buffer_get_empty():
    """    
    @returns: 
    @rtype: buffer_t
    """
    return object

def buffer_get_flags(buffer=None):
    """    See hb_buffer_set_flags().
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The @buffer flags.
    @rtype: buffer_flags_t
    """
    return object

def buffer_get_glyph_infos(buffer=None, length=None):
    """    Returns @buffer glyph information array.  Returned pointer
    is valid as long as @buffer contents are not modified.
    @param buffer: an #hb_buffer_t.
    @param length: output array length.
    @type buffer: buffer_t
    @type length: int
    @rtype: None
    """
    return object

def buffer_get_glyph_positions(buffer=None, length=None):
    """    Returns @buffer glyph position array.  Returned pointer
    is valid as long as @buffer contents are not modified.
    @param buffer: an #hb_buffer_t.
    @param length: output length.
    @type buffer: buffer_t
    @type length: int
    @rtype: None
    """
    return object

def buffer_get_language(buffer=None):
    """    See hb_buffer_set_language().
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The #hb_language_t of the buffer. Must not be freed by the caller.
    @rtype: language_t
    """
    return object

def buffer_get_length(buffer=None):
    """    Returns the number of items in the buffer.
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The @buffer length. The value valid as long as buffer has not been modified.
    @rtype: int
    """
    return object

def buffer_get_replacement_codepoint(buffer=None):
    """    See hb_buffer_set_replacement_codepoint().
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The @buffer replacement #hb_codepoint_t.
    @rtype: codepoint_t
    """
    return object

def buffer_get_script(buffer=None):
    """    See hb_buffer_set_script().
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The #hb_script_t of the @buffer.
    @rtype: script_t
    """
    return object

def buffer_get_segment_properties(buffer=None, props=None):
    """    Sets @props to the #hb_segment_properties_t of @buffer.
    @param buffer: an #hb_buffer_t.
    @param props: the output #hb_segment_properties_t.
    @type buffer: buffer_t
    @type props: segment_properties_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_get_unicode_funcs(buffer=None):
    """    
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: unicode_funcs_t
    """
    return object

def buffer_get_user_data(buffer=None, key=None):
    """    
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def buffer_guess_segment_properties(buffer=None):
    """    Sets unset buffer segment properties based on buffer Unicode
    contents.  If buffer is not empty, it must have content type
    %HB_BUFFER_CONTENT_TYPE_UNICODE.
    
    If buffer script is not set (ie. is %HB_SCRIPT_INVALID), it
    will be set to the Unicode script of the first character in
    the buffer that has a script other than %HB_SCRIPT_COMMON,
    %HB_SCRIPT_INHERITED, and %HB_SCRIPT_UNKNOWN.
    
    Next, if buffer direction is not set (ie. is %HB_DIRECTION_INVALID),
    it will be set to the natural horizontal direction of the
    buffer script as returned by hb_script_get_horizontal_direction().
    
    Finally, if buffer language is not set (ie. is %HB_LANGUAGE_INVALID),
    it will be set to the process's default language as returned by
    hb_language_get_default().  This may change in the future by
    taking buffer script into consideration when choosing a language.
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_normalize_glyphs(buffer=None):
    """    Reorders a glyph buffer to have canonical in-cluster glyph order / position.
    The resulting clusters should behave identical to pre-reordering clusters.
    
    <note>This has nothing to do with Unicode normalization.</note>
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_pre_allocate(buffer=None, size=None):
    """    Pre allocates memory for @buffer to fit at least @size number of items.
    @param buffer: an #hb_buffer_t.
    @param size: number of items to pre allocate.
    @type buffer: buffer_t
    @type size: int
    @returns: %true if @buffer memory allocation succeeded, %false otherwise.
    @rtype: bool_t
    """
    return object

def buffer_reference(buffer=None):
    """    Increases the reference count on @buffer by one. This prevents @buffer from
    being destroyed until a matching call to hb_buffer_destroy() is made.
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: The referenced #hb_buffer_t.
    @rtype: buffer_t
    """
    return object

def buffer_reset(buffer=None):
    """    Resets the buffer to its initial status, as if it was just newly created
    with hb_buffer_create().
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_reverse(buffer=None):
    """    Reverses buffer contents.
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_reverse_clusters(buffer=None):
    """    Reverses buffer clusters.  That is, the buffer contents are
    reversed, then each cluster (consecutive items having the
    same cluster number) are reversed again.
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_reverse_range(buffer=None, start=None, end=None):
    """    Reverses buffer contents between start to end.
    @param buffer: an #hb_buffer_t.
    @param start: start index.
    @param end: end index.
    @type buffer: buffer_t
    @type start: int
    @type end: int
    @returns: 
    @rtype: None
    """
    return object


class buffer_serialize_flags_t:
    """Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs()."""
    DEFAULT = 0
    NO_CLUSTERS = 1
    NO_POSITIONS = 2
    NO_GLYPH_NAMES = 4
    GLYPH_EXTENTS = 8
    GLYPH_FLAGS = 16

def buffer_serialize_format_from_string(str=None, len=None):
    """    Parses a string into an #hb_buffer_serialize_format_t. Does not check if
    @str is a valid buffer serialization format, use
    hb_buffer_serialize_list_formats() to get the list of supported formats.
    @param str: a string to parse
    @param len: length of @str, or -1 if string is %NULL terminated
    @type len: int
    @returns: The parsed #hb_buffer_serialize_format_t.
    @rtype: buffer_serialize_format_t
    """
    return object


class buffer_serialize_format_t:
    """The buffer serialization and de-serialization format used in
hb_buffer_serialize_glyphs() and hb_buffer_deserialize_glyphs()."""
    TEXT = 1413830740
    JSON = 1246973774
    INVALID = 0

def buffer_serialize_format_to_string(format=None):
    """    Converts @format to the string corresponding it, or %NULL if it is not a valid
    #hb_buffer_serialize_format_t.
    @param format: an #hb_buffer_serialize_format_t to convert.
    @type format: buffer_serialize_format_t
    @returns: A %NULL terminated string corresponding to @format. Should not be freed.
    @rtype: str
    """
    return object

def buffer_serialize_glyphs(buffer=None, start=None, end=None, buf=None, buf_size=None, buf_consumed=None, font=None, format=None, flags=None):
    """    Serializes @buffer into a textual representation of its glyph content,
    useful for showing the contents of the buffer, for example during debugging.
    There are currently two supported serialization formats:
    
    ## text
    A human-readable, plain text format.
    The serialized glyphs will look something like:
    
    ```
    [uni0651=0@518,0+0|uni0628=0+1897]
    ```
    - The serialized glyphs are delimited with `[` and `]`.
    - Glyphs are separated with `|`
    - Each glyph starts with glyph name, or glyph index if
      #HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES flag is set. Then,
      - If #HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS is not set, `=` then #hb_glyph_info_t.cluster.
      - If #HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS is not set, the #hb_glyph_position_t in the format:
        - If both #hb_glyph_position_t.x_offset and #hb_glyph_position_t.y_offset are not 0, `@x_offset,y_offset`. Then,
        - `+x_advance`, then `,y_advance` if #hb_glyph_position_t.y_advance is not 0. Then,
      - If #HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS is set, the
        #hb_glyph_extents_t in the format
        `&lt;x_bearing,y_bearing,width,height&gt;`
    
    ## json
    TODO.
    @param buffer: an #hb_buffer_t buffer.
    @param start: the first item in @buffer to serialize.
    @param end: the last item in @buffer to serialize.
    @param buf: output string to       write serialized buffer into.
    @param buf_size: the size of @buf.
    @param buf_consumed: if not %NULL, will be set to the number of byes written into @buf.
    @param font: the #hb_font_t used to shape this buffer, needed to        read glyph names and extents. If %NULL, and empty font will be used.
    @param format: the #hb_buffer_serialize_format_t to use for formatting the output.
    @param flags: the #hb_buffer_serialize_flags_t that control what glyph properties         to serialize.
    @type buffer: buffer_t
    @type start: int
    @type end: int
    @type buf_size: int
    @type buf_consumed: int
    @type font: font_t
    @type format: buffer_serialize_format_t
    @type flags: buffer_serialize_flags_t
    @returns: The number of serialized items.
    @rtype: int
    """
    return object

def buffer_serialize_list_formats():
    """    Returns a list of supported buffer serialization formats.
    @rtype: None
    """
    return object

def buffer_set_cluster_level(buffer=None, cluster_level=None):
    """    
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @type cluster_level: buffer_cluster_level_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_content_type(buffer=None, content_type=None):
    """    Sets the type of @buffer contents, buffers are either empty, contain
    characters (before shaping) or glyphs (the result of shaping).
    @param buffer: an #hb_buffer_t.
    @param content_type: the type of buffer contents to set
    @type buffer: buffer_t
    @type content_type: buffer_content_type_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_direction(buffer=None, direction=None):
    """    Set the text flow direction of the buffer. No shaping can happen without
    setting @buffer direction, and it controls the visual direction for the
    output glyphs; for RTL direction the glyphs will be reversed. Many layout
    features depend on the proper setting of the direction, for example,
    reversing RTL text before shaping, then shaping with LTR direction is not
    the same as keeping the text in logical order and shaping with RTL
    direction.
    @param buffer: an #hb_buffer_t.
    @param direction: the #hb_direction_t of the @buffer
    @type buffer: buffer_t
    @type direction: direction_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_flags(buffer=None, flags=None):
    """    Sets @buffer flags to @flags. See #hb_buffer_flags_t.
    @param buffer: an #hb_buffer_t.
    @param flags: the buffer flags to set.
    @type buffer: buffer_t
    @type flags: buffer_flags_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_language(buffer=None, language=None):
    """    Sets the language of @buffer to @language.
    
    Languages are crucial for selecting which OpenType feature to apply to the
    buffer which can result in applying language-specific behaviour. Languages
    are orthogonal to the scripts, and though they are related, they are
    different concepts and should not be confused with each other.
    
    Use hb_language_from_string() to convert from ISO 639 language codes to
    #hb_language_t.
    @param buffer: an #hb_buffer_t.
    @param language: an hb_language_t to set.
    @type buffer: buffer_t
    @type language: language_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_length(buffer=None, length=None):
    """    Similar to hb_buffer_pre_allocate(), but clears any new items added at the
    end.
    @param buffer: an #hb_buffer_t.
    @param length: the new length of @buffer.
    @type buffer: buffer_t
    @type length: int
    @returns: %true if @buffer memory allocation succeeded, %false otherwise.
    @rtype: bool_t
    """
    return object

def buffer_set_message_func(buffer=None, func=None, user_data=None, destroy=None):
    """    
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @type func: buffer_message_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_replacement_codepoint(buffer=None, replacement=None):
    """    Sets the #hb_codepoint_t that replaces invalid entries for a given encoding
    when adding text to @buffer.
    
    Default is %HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT.
    @param buffer: an #hb_buffer_t.
    @param replacement: the replacement #hb_codepoint_t
    @type buffer: buffer_t
    @type replacement: codepoint_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_script(buffer=None, script=None):
    """    Sets the script of @buffer to @script.
    
    Script is crucial for choosing the proper shaping behaviour for scripts that
    require it (e.g. Arabic) and the which OpenType features defined in the font
    to be applied.
    
    You can pass one of the predefined #hb_script_t values, or use
    hb_script_from_string() or hb_script_from_iso15924_tag() to get the
    corresponding script from an ISO 15924 script tag.
    @param buffer: an #hb_buffer_t.
    @param script: an #hb_script_t to set.
    @type buffer: buffer_t
    @type script: script_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_segment_properties(buffer=None, props=None):
    """    Sets the segment properties of the buffer, a shortcut for calling
    hb_buffer_set_direction(), hb_buffer_set_script() and
    hb_buffer_set_language() individually.
    @param buffer: an #hb_buffer_t.
    @param props: an #hb_segment_properties_t to use.
    @type buffer: buffer_t
    @type props: segment_properties_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_unicode_funcs(buffer=None, unicode_funcs=None):
    """    
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @type unicode_funcs: unicode_funcs_t
    @returns: 
    @rtype: None
    """
    return object

def buffer_set_user_data(buffer=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param buffer: an #hb_buffer_t.
    @type buffer: buffer_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def direction_from_string(str=None, len=None):
    """    
    @type len: int
    @returns: 
    @rtype: direction_t
    """
    return object


class direction_t:
    """"""
    INVALID = 0
    LTR = 4
    RTL = 5
    TTB = 6
    BTT = 7

def direction_to_string(direction=None):
    """    
    @type direction: direction_t
    @returns: 
    @rtype: str
    """
    return object

def face_create(blob=None, index=None):
    """    
    @type blob: blob_t
    @type index: int
    @returns: 
    @rtype: face_t
    """
    return object

def face_create_for_tables(reference_table_func=None, user_data=None, destroy=None):
    """    
    @type reference_table_func: reference_table_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: face_t
    """
    return object

def face_destroy(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: None
    """
    return object

def face_get_empty():
    """    
    @returns: 
    @rtype: face_t
    """
    return object

def face_get_glyph_count(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: int
    """
    return object

def face_get_index(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: int
    """
    return object

def face_get_table_tags(face=None, start_offset=None, table_count=None, table_tags=None):
    """    Retrieves table tags for a face, if possible.
    @param face: a face.
    @type face: face_t
    @type start_offset: int
    @type table_count: int
    @type table_tags: tag_t
    @returns: total number of tables, or 0 if not possible to list.
    @rtype: int
    """
    return object

def face_get_upem(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: int
    """
    return object

def face_get_user_data(face=None, key=None):
    """    
    @param face: a face.
    @type face: face_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def face_is_immutable(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: bool_t
    """
    return object

def face_make_immutable(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: None
    """
    return object

def face_reference(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: face_t
    """
    return object

def face_reference_blob(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: blob_t
    """
    return object

def face_reference_table(face=None, tag=None):
    """    
    @param face: a face.
    @type face: face_t
    @type tag: tag_t
    @returns: 
    @rtype: blob_t
    """
    return object

def face_set_glyph_count(face=None, glyph_count=None):
    """    
    @param face: a face.
    @type face: face_t
    @type glyph_count: int
    @returns: 
    @rtype: None
    """
    return object

def face_set_index(face=None, index=None):
    """    
    @param face: a face.
    @type face: face_t
    @type index: int
    @returns: 
    @rtype: None
    """
    return object

def face_set_upem(face=None, upem=None):
    """    
    @param face: a face.
    @type face: face_t
    @type upem: int
    @returns: 
    @rtype: None
    """
    return object

def face_set_user_data(face=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param face: a face.
    @type face: face_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def feature_from_string(str=None, len=None, feature=None):
    """    Parses a string into a #hb_feature_t.
    
    TODO: document the syntax here.
    @param str: a string to parse
    @param len: length of @str, or -1 if string is %NULL terminated
    @param feature: the #hb_feature_t to initialize with the parsed values
    @type len: int
    @type feature: feature_t
    @returns: %true if @str is successfully parsed, %false otherwise.
    @rtype: bool_t
    """
    return object

def feature_to_string(feature=None, buf=None, size=None):
    """    Converts a #hb_feature_t into a %NULL-terminated string in the format
    understood by hb_feature_from_string(). The client in responsible for
    allocating big enough size for @buf, 128 bytes is more than enough.
    @param feature: an #hb_feature_t to convert
    @param buf: output string
    @param size: the allocated size of @buf
    @type feature: feature_t
    @type size: int
    @returns: 
    @rtype: None
    """
    return object

def font_add_glyph_origin_for_direction(font=None, glyph=None, direction=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type direction: direction_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: None
    """
    return object

def font_create(face=None):
    """    
    @param face: a face.
    @type face: face_t
    @returns: 
    @rtype: font_t
    """
    return object

def font_create_sub_font(parent=None):
    """    
    @param parent: parent font.
    @type parent: font_t
    @returns: 
    @rtype: font_t
    """
    return object

def font_destroy(font=None):
    """    
    @param font: a font.
    @type font: font_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_create():
    """    
    @returns: 
    @rtype: font_funcs_t
    """
    return object

def font_funcs_destroy(ffuncs=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_get_empty():
    """    
    @returns: 
    @rtype: font_funcs_t
    """
    return object

def font_funcs_get_user_data(ffuncs=None, key=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def font_funcs_is_immutable(ffuncs=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_funcs_make_immutable(ffuncs=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_reference(ffuncs=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @returns: 
    @rtype: font_funcs_t
    """
    return object

def font_funcs_set_font_h_extents_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_font_h_extents_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_font_v_extents_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_font_v_extents_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_contour_point_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_contour_point_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_extents_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_extents_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_from_name_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_from_name_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    Deprecated.  Use hb_font_funcs_set_nominal_glyph_func() and
    hb_font_funcs_set_variation_glyph_func() instead.
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_h_advance_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_h_advance_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_h_kerning_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_h_kerning_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_h_origin_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_h_origin_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_name_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_name_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_v_advance_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_v_advance_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_v_kerning_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_v_kerning_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_glyph_v_origin_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_glyph_v_origin_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_nominal_glyph_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_nominal_glyph_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_funcs_set_user_data(ffuncs=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_funcs_set_variation_glyph_func(ffuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ffuncs: font functions.
    @type ffuncs: font_funcs_t
    @type func: font_get_variation_glyph_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_get_empty():
    """    
    @returns: 
    @rtype: font_t
    """
    return object

def font_get_extents_for_direction(font=None, direction=None, extents=None):
    """    
    @param font: a font.
    @type font: font_t
    @type direction: direction_t
    @type extents: font_extents_t
    @returns: 
    @rtype: None
    """
    return object

def font_get_face(font=None):
    """    
    @param font: a font.
    @type font: font_t
    @returns: 
    @rtype: face_t
    """
    return object

def font_get_glyph(font=None, unicode=None, variation_selector=None, glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type unicode: codepoint_t
    @type variation_selector: codepoint_t
    @type glyph: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_advance_for_direction(font=None, glyph=None, direction=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type direction: direction_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: None
    """
    return object

def font_get_glyph_contour_point(font=None, glyph=None, point_index=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type point_index: int
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_contour_point_for_origin(font=None, glyph=None, point_index=None, direction=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type point_index: int
    @type direction: direction_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_extents(font=None, glyph=None, extents=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type extents: glyph_extents_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_extents_for_origin(font=None, glyph=None, direction=None, extents=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type direction: direction_t
    @type extents: glyph_extents_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_from_name(font=None, name=None, len=None, glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type len: int
    @type glyph: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_h_advance(font=None, glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @returns: 
    @rtype: position_t
    """
    return object

def font_get_glyph_h_kerning(font=None, left_glyph=None, right_glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type left_glyph: codepoint_t
    @type right_glyph: codepoint_t
    @returns: 
    @rtype: position_t
    """
    return object

def font_get_glyph_h_origin(font=None, glyph=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_kerning_for_direction(font=None, first_glyph=None, second_glyph=None, direction=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type first_glyph: codepoint_t
    @type second_glyph: codepoint_t
    @type direction: direction_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: None
    """
    return object

def font_get_glyph_name(font=None, glyph=None, name=None, size=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type size: int
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_glyph_origin_for_direction(font=None, glyph=None, direction=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type direction: direction_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: None
    """
    return object

def font_get_glyph_v_advance(font=None, glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @returns: 
    @rtype: position_t
    """
    return object

def font_get_glyph_v_kerning(font=None, top_glyph=None, bottom_glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type top_glyph: codepoint_t
    @type bottom_glyph: codepoint_t
    @returns: 
    @rtype: position_t
    """
    return object

def font_get_glyph_v_origin(font=None, glyph=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_h_extents(font=None, extents=None):
    """    
    @param font: a font.
    @type font: font_t
    @type extents: font_extents_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_nominal_glyph(font=None, unicode=None, glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type unicode: codepoint_t
    @type glyph: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_parent(font=None):
    """    
    @param font: a font.
    @type font: font_t
    @returns: 
    @rtype: font_t
    """
    return object

def font_get_ppem(font=None, x_ppem=None, y_ppem=None):
    """    
    @param font: a font.
    @type font: font_t
    @type x_ppem: int
    @type y_ppem: int
    @returns: 
    @rtype: None
    """
    return object

def font_get_ptem(font=None):
    """    Gets the "point size" of the font.  A value of 0 means unset.
    @param font: a font.
    @type font: font_t
    @returns: Point size.
    @rtype: float
    """
    return object

def font_get_scale(font=None, x_scale=None, y_scale=None):
    """    
    @param font: a font.
    @type font: font_t
    @type x_scale: int
    @type y_scale: int
    @returns: 
    @rtype: None
    """
    return object

def font_get_user_data(font=None, key=None):
    """    
    @param font: a font.
    @type font: font_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def font_get_v_extents(font=None, extents=None):
    """    
    @param font: a font.
    @type font: font_t
    @type extents: font_extents_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_get_var_coords_normalized(font=None, length=None):
    """    Return value is valid as long as variation coordinates of the font
    are not modified.
    @type font: font_t
    @type length: int
    @returns: 
    @rtype: int
    """
    return object

def font_get_variation_glyph(font=None, unicode=None, variation_selector=None, glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type unicode: codepoint_t
    @type variation_selector: codepoint_t
    @type glyph: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_glyph_from_string(font=None, s=None, len=None, glyph=None):
    """    
    @param font: a font.
    @type font: font_t
    @type len: int
    @type glyph: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_glyph_to_string(font=None, glyph=None, s=None, size=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type size: int
    @returns: 
    @rtype: None
    """
    return object

def font_is_immutable(font=None):
    """    
    @param font: a font.
    @type font: font_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_make_immutable(font=None):
    """    
    @param font: a font.
    @type font: font_t
    @returns: 
    @rtype: None
    """
    return object

def font_reference(font=None):
    """    
    @param font: a font.
    @type font: font_t
    @returns: 
    @rtype: font_t
    """
    return object

def font_set_face(font=None, face=None):
    """    Sets font-face of @font.
    @param font: a font.
    @param face: new face.
    @type font: font_t
    @type face: face_t
    @returns: 
    @rtype: None
    """
    return object

def font_set_funcs(font=None, klass=None, font_data=None, destroy=None):
    """    
    @param font: a font.
    @type font: font_t
    @type klass: font_funcs_t
    @type font_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_set_funcs_data(font=None, font_data=None, destroy=None):
    """    
    @param font: a font.
    @type font: font_t
    @type font_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def font_set_parent(font=None, parent=None):
    """    Sets parent font of @font.
    @param font: a font.
    @param parent: new parent.
    @type font: font_t
    @type parent: font_t
    @returns: 
    @rtype: None
    """
    return object

def font_set_ppem(font=None, x_ppem=None, y_ppem=None):
    """    
    @param font: a font.
    @type font: font_t
    @type x_ppem: int
    @type y_ppem: int
    @returns: 
    @rtype: None
    """
    return object

def font_set_ptem(font=None, ptem=None):
    """    Sets "point size" of the font.
    @param font: a font.
    @type font: font_t
    @type ptem: float
    @returns: 
    @rtype: None
    """
    return object

def font_set_scale(font=None, x_scale=None, y_scale=None):
    """    
    @param font: a font.
    @type font: font_t
    @type x_scale: int
    @type y_scale: int
    @returns: 
    @rtype: None
    """
    return object

def font_set_user_data(font=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param font: a font.
    @type font: font_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def font_set_var_coords_design(font=None, coords=None, coords_length=None):
    """    
    @type font: font_t
    @type coords: float
    @type coords_length: int
    @returns: 
    @rtype: None
    """
    return object

def font_set_var_coords_normalized(font=None, coords=None, coords_length=None):
    """    
    @type font: font_t
    @type coords: int
    @type coords_length: int
    @returns: 
    @rtype: None
    """
    return object

def font_set_variations(font=None, variations=None, variations_length=None):
    """    
    @type font: font_t
    @type variations: variation_t
    @type variations_length: int
    @returns: 
    @rtype: None
    """
    return object

def font_subtract_glyph_origin_for_direction(font=None, glyph=None, direction=None, x=None, y=None):
    """    
    @param font: a font.
    @type font: font_t
    @type glyph: codepoint_t
    @type direction: direction_t
    @type x: position_t
    @type y: position_t
    @returns: 
    @rtype: None
    """
    return object

def ft_face_create(ft_face=None, destroy=None):
    """    
    @type ft_face: object
    @type destroy: destroy_func_t
    @returns: 
    @rtype: face_t
    """
    return object

def ft_face_create_cached(ft_face=None):
    """    
    @type ft_face: object
    @returns: 
    @rtype: face_t
    """
    return object

def ft_face_create_referenced(ft_face=None):
    """    
    @type ft_face: object
    @returns: 
    @rtype: face_t
    """
    return object

def ft_font_changed(font=None):
    """    
    @type font: font_t
    @returns: 
    @rtype: None
    """
    return object

def ft_font_create(ft_face=None, destroy=None):
    """    
    @type ft_face: object
    @type destroy: destroy_func_t
    @returns: 
    @rtype: font_t
    """
    return object

def ft_font_create_referenced(ft_face=None):
    """    
    @type ft_face: object
    @returns: 
    @rtype: font_t
    """
    return object

def ft_font_get_face(font=None):
    """    
    @type font: font_t
    @returns: 
    @rtype: object
    """
    return object

def ft_font_get_load_flags(font=None):
    """    
    @type font: font_t
    @returns: 
    @rtype: int
    """
    return object

def ft_font_set_funcs(font=None):
    """    
    @type font: font_t
    @returns: 
    @rtype: None
    """
    return object

def ft_font_set_load_flags(font=None, load_flags=None):
    """    
    @type font: font_t
    @type load_flags: int
    @returns: 
    @rtype: None
    """
    return object

def glib_blob_create(gbytes=None):
    """    
    @type gbytes: GLib.Bytes
    @returns: 
    @rtype: blob_t
    """
    return object

def glib_get_unicode_funcs():
    """    
    @returns: 
    @rtype: unicode_funcs_t
    """
    return object

def glib_script_from_script(script=None):
    """    
    @type script: script_t
    @returns: 
    @rtype: GLib.UnicodeScript
    """
    return object

def glib_script_to_script(script=None):
    """    
    @type script: GLib.UnicodeScript
    @returns: 
    @rtype: script_t
    """
    return object


class glyph_flags_t:
    """"""
    UNSAFE_TO_BREAK = 1
    DEFINED = 1

def glyph_info_get_glyph_flags(info=None):
    """    Returns glyph flags encoded within a #hb_glyph_info_t.
    @param info: a #hb_glyph_info_t.
    @type info: glyph_info_t
    @returns: The #hb_glyph_flags_t encoded within @info.
    @rtype: glyph_flags_t
    """
    return object

def graphite2_face_get_gr_face(face=None):
    """    
    @type face: face_t
    @returns: 
    @rtype: object
    """
    return object

def graphite2_font_get_gr_font(font=None):
    """    
    @type font: font_t
    @returns: 
    @rtype: object
    """
    return object

def language_from_string(str=None, len=None):
    """    Converts @str representing an ISO 639 language code to the corresponding
    #hb_language_t.
    @param str: a string representing       ISO 639 language code
    @param len: length of the @str, or -1 if it is %NULL-terminated.
    @type len: int
    @returns: The #hb_language_t corresponding to the ISO 639 language code.
    @rtype: language_t
    """
    return object

def language_get_default():
    """    
    @returns: 
    @rtype: language_t
    """
    return object

def language_to_string(language=None):
    """    See hb_language_from_string().
    @param language: an #hb_language_t to convert.
    @type language: language_t
    @returns: A %NULL-terminated string representing the @language. Must not be freed by the caller.
    @rtype: str
    """
    return object


class memory_mode_t:
    """"""
    DUPLICATE = 0
    READONLY = 1
    WRITABLE = 2
    READONLY_MAY_MAKE_WRITABLE = 3

def ot_font_set_funcs(font=None):
    """    
    @type font: font_t
    @returns: 
    @rtype: None
    """
    return object

def ot_layout_collect_lookups(face=None, table_tag=None, scripts=None, languages=None, features=None, lookup_indexes=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type scripts: tag_t
    @type languages: tag_t
    @type features: tag_t
    @type lookup_indexes: set_t
    @returns: 
    @rtype: None
    """
    return object

def ot_layout_feature_get_lookups(face=None, table_tag=None, feature_index=None, start_offset=None, lookup_count=None, lookup_indexes=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type feature_index: int
    @type start_offset: int
    @type lookup_count: int
    @type lookup_indexes: int
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_feature_with_variations_get_lookups(face=None, table_tag=None, feature_index=None, variations_index=None, start_offset=None, lookup_count=None, lookup_indexes=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type feature_index: int
    @type variations_index: int
    @type start_offset: int
    @type lookup_count: int
    @type lookup_indexes: int
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_get_attach_points(face=None, glyph=None, start_offset=None, point_count=None, point_array=None):
    """    
    @type face: face_t
    @type glyph: codepoint_t
    @type start_offset: int
    @type point_count: int
    @type point_array: int
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_get_glyph_class(face=None, glyph=None):
    """    
    @type face: face_t
    @type glyph: codepoint_t
    @returns: 
    @rtype: ot_layout_glyph_class_t
    """
    return object

def ot_layout_get_glyphs_in_class(face=None, klass=None, glyphs=None):
    """    
    @type face: face_t
    @type klass: ot_layout_glyph_class_t
    @type glyphs: set_t
    @returns: 
    @rtype: None
    """
    return object

def ot_layout_get_ligature_carets(font=None, direction=None, glyph=None, start_offset=None, caret_count=None, caret_array=None):
    """    
    @type font: font_t
    @type direction: direction_t
    @type glyph: codepoint_t
    @type start_offset: int
    @type caret_count: int
    @type caret_array: position_t
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_get_size_params(face=None, design_size=None, subfamily_id=None, subfamily_name_id=None, range_start=None, range_end=None):
    """    
    @type face: face_t
    @type design_size: int
    @type subfamily_id: int
    @type subfamily_name_id: int
    @type range_start: int
    @type range_end: int
    @returns: 
    @rtype: bool_t
    """
    return object


class ot_layout_glyph_class_t:
    """"""
    UNCLASSIFIED = 0
    BASE_GLYPH = 1
    LIGATURE = 2
    MARK = 3
    COMPONENT = 4

def ot_layout_has_glyph_classes(face=None):
    """    
    @type face: face_t
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_has_positioning(face=None):
    """    
    @type face: face_t
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_has_substitution(face=None):
    """    
    @type face: face_t
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_language_find_feature(face=None, table_tag=None, script_index=None, language_index=None, feature_tag=None, feature_index=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_index: int
    @type language_index: int
    @type feature_tag: tag_t
    @type feature_index: int
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_language_get_feature_indexes(face=None, table_tag=None, script_index=None, language_index=None, start_offset=None, feature_count=None, feature_indexes=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_index: int
    @type language_index: int
    @type start_offset: int
    @type feature_count: int
    @type feature_indexes: int
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_language_get_feature_tags(face=None, table_tag=None, script_index=None, language_index=None, start_offset=None, feature_count=None, feature_tags=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_index: int
    @type language_index: int
    @type start_offset: int
    @type feature_count: int
    @type feature_tags: tag_t
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_language_get_required_feature(face=None, table_tag=None, script_index=None, language_index=None, feature_index=None, feature_tag=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_index: int
    @type language_index: int
    @type feature_index: int
    @type feature_tag: tag_t
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_language_get_required_feature_index(face=None, table_tag=None, script_index=None, language_index=None, feature_index=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_index: int
    @type language_index: int
    @type feature_index: int
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_lookup_collect_glyphs(face=None, table_tag=None, lookup_index=None, glyphs_before=None, glyphs_input=None, glyphs_after=None, glyphs_output=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type lookup_index: int
    @type glyphs_before: set_t
    @type glyphs_input: set_t
    @type glyphs_after: set_t
    @type glyphs_output: set_t
    @returns: 
    @rtype: None
    """
    return object

def ot_layout_lookup_substitute_closure(face=None, lookup_index=None, glyphs=None):
    """    
    @type face: face_t
    @type lookup_index: int
    @type glyphs: set_t
    @returns: 
    @rtype: None
    """
    return object

def ot_layout_lookup_would_substitute(face=None, lookup_index=None, glyphs=None, glyphs_length=None, zero_context=None):
    """    
    @type face: face_t
    @type lookup_index: int
    @type glyphs: codepoint_t
    @type glyphs_length: int
    @type zero_context: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_script_find_language(face=None, table_tag=None, script_index=None, language_tag=None, language_index=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_index: int
    @type language_tag: tag_t
    @type language_index: int
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_script_get_language_tags(face=None, table_tag=None, script_index=None, start_offset=None, language_count=None, language_tags=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_index: int
    @type start_offset: int
    @type language_count: int
    @type language_tags: tag_t
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_table_choose_script(face=None, table_tag=None, script_tags=None, script_index=None, chosen_script=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_tags: tag_t
    @type script_index: int
    @type chosen_script: tag_t
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_table_find_feature_variations(face=None, table_tag=None, coords=None, num_coords=None, variations_index=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type coords: int
    @type num_coords: int
    @type variations_index: int
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_table_find_script(face=None, table_tag=None, script_tag=None, script_index=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type script_tag: tag_t
    @type script_index: int
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_layout_table_get_feature_tags(face=None, table_tag=None, start_offset=None, feature_count=None, feature_tags=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type start_offset: int
    @type feature_count: int
    @type feature_tags: tag_t
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_table_get_lookup_count(face=None, table_tag=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @returns: 
    @rtype: int
    """
    return object

def ot_layout_table_get_script_tags(face=None, table_tag=None, start_offset=None, script_count=None, script_tags=None):
    """    
    @type face: face_t
    @type table_tag: tag_t
    @type start_offset: int
    @type script_count: int
    @type script_tags: tag_t
    @returns: 
    @rtype: int
    """
    return object


class ot_math_constant_t:
    """"""
    SCRIPT_PERCENT_SCALE_DOWN = 0
    SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = 1
    DELIMITED_SUB_FORMULA_MIN_HEIGHT = 2
    DISPLAY_OPERATOR_MIN_HEIGHT = 3
    MATH_LEADING = 4
    AXIS_HEIGHT = 5
    ACCENT_BASE_HEIGHT = 6
    FLATTENED_ACCENT_BASE_HEIGHT = 7
    SUBSCRIPT_SHIFT_DOWN = 8
    SUBSCRIPT_TOP_MAX = 9
    SUBSCRIPT_BASELINE_DROP_MIN = 10
    SUPERSCRIPT_SHIFT_UP = 11
    SUPERSCRIPT_SHIFT_UP_CRAMPED = 12
    SUPERSCRIPT_BOTTOM_MIN = 13
    SUPERSCRIPT_BASELINE_DROP_MAX = 14
    SUB_SUPERSCRIPT_GAP_MIN = 15
    SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = 16
    SPACE_AFTER_SCRIPT = 17
    UPPER_LIMIT_GAP_MIN = 18
    UPPER_LIMIT_BASELINE_RISE_MIN = 19
    LOWER_LIMIT_GAP_MIN = 20
    LOWER_LIMIT_BASELINE_DROP_MIN = 21
    STACK_TOP_SHIFT_UP = 22
    STACK_TOP_DISPLAY_STYLE_SHIFT_UP = 23
    STACK_BOTTOM_SHIFT_DOWN = 24
    STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = 25
    STACK_GAP_MIN = 26
    STACK_DISPLAY_STYLE_GAP_MIN = 27
    STRETCH_STACK_TOP_SHIFT_UP = 28
    STRETCH_STACK_BOTTOM_SHIFT_DOWN = 29
    STRETCH_STACK_GAP_ABOVE_MIN = 30
    STRETCH_STACK_GAP_BELOW_MIN = 31
    FRACTION_NUMERATOR_SHIFT_UP = 32
    FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = 33
    FRACTION_DENOMINATOR_SHIFT_DOWN = 34
    FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = 35
    FRACTION_NUMERATOR_GAP_MIN = 36
    FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = 37
    FRACTION_RULE_THICKNESS = 38
    FRACTION_DENOMINATOR_GAP_MIN = 39
    FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = 40
    SKEWED_FRACTION_HORIZONTAL_GAP = 41
    SKEWED_FRACTION_VERTICAL_GAP = 42
    OVERBAR_VERTICAL_GAP = 43
    OVERBAR_RULE_THICKNESS = 44
    OVERBAR_EXTRA_ASCENDER = 45
    UNDERBAR_VERTICAL_GAP = 46
    UNDERBAR_RULE_THICKNESS = 47
    UNDERBAR_EXTRA_DESCENDER = 48
    RADICAL_VERTICAL_GAP = 49
    RADICAL_DISPLAY_STYLE_VERTICAL_GAP = 50
    RADICAL_RULE_THICKNESS = 51
    RADICAL_EXTRA_ASCENDER = 52
    RADICAL_KERN_BEFORE_DEGREE = 53
    RADICAL_KERN_AFTER_DEGREE = 54
    RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = 55

def ot_math_get_constant(font=None, constant=None):
    """    This function returns the requested math constants as a #hb_position_t.
    If the request constant is HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN,
    HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN or
    HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN then the return value is
    actually an integer between 0 and 100 representing that percentage.
    @param font: #hb_font_t from which to retrieve the value
    @param constant: #hb_ot_math_constant_t the constant to retrieve
    @type font: font_t
    @type constant: ot_math_constant_t
    @returns: the requested constant or 0
    @rtype: position_t
    """
    return object

def ot_math_get_glyph_assembly(font=None, glyph=None, direction=None, start_offset=None, parts_count=None, parts=None, italics_correction=None):
    """    This function tries to retrieve the GlyphAssembly for the specified font,
    glyph and direction. Note that only the value of #HB_DIRECTION_IS_HORIZONTAL
    is considered. It provides the information necessary to draw the glyph
    assembly as an array of #hb_ot_math_glyph_part_t.
    @param font: #hb_font_t from which to retrieve the values
    @param glyph: index of the glyph to stretch
    @param direction: direction of the stretching
    @param start_offset: offset of the first glyph part to retrieve
    @param parts_count: maximum number of glyph parts to retrieve after start_offset (IN) and actual number of parts retrieved (OUT)
    @param parts: array of size at least @parts_count to store the result
    @param italics_correction: italic correction of the glyph assembly
    @type font: font_t
    @type glyph: codepoint_t
    @type direction: direction_t
    @type start_offset: int
    @type parts_count: int
    @type parts: ot_math_glyph_part_t
    @type italics_correction: position_t
    @returns: the total number of parts in the glyph assembly
    @rtype: int
    """
    return object

def ot_math_get_glyph_italics_correction(font=None, glyph=None):
    """    
    @param font: #hb_font_t from which to retrieve the value
    @param glyph: glyph index from which to retrieve the value
    @type font: font_t
    @type glyph: codepoint_t
    @returns: the italics correction of the glyph or 0
    @rtype: position_t
    """
    return object

def ot_math_get_glyph_kerning(font=None, glyph=None, kern=None, correction_height=None):
    """    This function tries to retrieve the MathKern table for the specified font,
    glyph and #hb_ot_math_kern_t. Then it browses the list of heights from the
    MathKern table to find one value that is greater or equal to specified
    correction_height. If one is found the corresponding value from the list of
    kerns is returned and otherwise the last kern value is returned.
    @param font: #hb_font_t from which to retrieve the value
    @param glyph: glyph index from which to retrieve the value
    @param kern: the #hb_ot_math_kern_t from which to retrieve the value
    @param correction_height: the correction height to use to determine the kerning.
    @type font: font_t
    @type glyph: codepoint_t
    @type kern: ot_math_kern_t
    @type correction_height: position_t
    @returns: requested kerning or 0
    @rtype: position_t
    """
    return object

def ot_math_get_glyph_top_accent_attachment(font=None, glyph=None):
    """    
    @param font: #hb_font_t from which to retrieve the value
    @param glyph: glyph index from which to retrieve the value
    @type font: font_t
    @type glyph: codepoint_t
    @returns: the top accent attachment of the glyph or 0
    @rtype: position_t
    """
    return object

def ot_math_get_glyph_variants(font=None, glyph=None, direction=None, start_offset=None, variants_count=None, variants=None):
    """    This function tries to retrieve the MathGlyphConstruction for the specified
    font, glyph and direction. Note that only the value of
    #HB_DIRECTION_IS_HORIZONTAL is considered. It provides the corresponding list
    of size variants as an array of hb_ot_math_glyph_variant_t structs.
    @param font: #hb_font_t from which to retrieve the values
    @param glyph: index of the glyph to stretch
    @param direction: direction of the stretching
    @param start_offset: offset of the first variant to retrieve
    @param variants_count: maximum number of variants to retrieve after start_offset (IN) and actual number of variants retrieved (OUT)
    @param variants: array of size at least @variants_count to store the result
    @type font: font_t
    @type glyph: codepoint_t
    @type direction: direction_t
    @type start_offset: int
    @type variants_count: int
    @type variants: ot_math_glyph_variant_t
    @returns: the total number of size variants available or 0
    @rtype: int
    """
    return object

def ot_math_get_min_connector_overlap(font=None, direction=None):
    """    This function tries to retrieve the MathVariants table for the specified
    font and returns the minimum overlap of connecting glyphs to draw a glyph
    assembly in the specified direction. Note that only the value of
    #HB_DIRECTION_IS_HORIZONTAL is considered.
    @param font: #hb_font_t from which to retrieve the value
    @param direction: direction of the stretching
    @type font: font_t
    @type direction: direction_t
    @returns: requested min connector overlap or 0
    @rtype: position_t
    """
    return object


class ot_math_glyph_part_flags_t:
    """"""
    EXTENDER = 1

def ot_math_has_data(face=None):
    """    This function allows to verify the presence of an OpenType MATH table on the
    face.
    @param face: #hb_face_t to test
    @type face: face_t
    @returns: true if face has a MATH table, false otherwise
    @rtype: bool_t
    """
    return object

def ot_math_is_glyph_extended_shape(face=None, glyph=None):
    """    
    @param face: a #hb_face_t to test
    @param glyph: a glyph index to test
    @type face: face_t
    @type glyph: codepoint_t
    @returns: true if the glyph is an extended shape, false otherwise
    @rtype: bool_t
    """
    return object


class ot_math_kern_t:
    """"""
    TOP_RIGHT = 0
    TOP_LEFT = 1
    BOTTOM_RIGHT = 2
    BOTTOM_LEFT = 3

def ot_shape_glyphs_closure(font=None, buffer=None, features=None, num_features=None, glyphs=None):
    """    
    @type font: font_t
    @type buffer: buffer_t
    @type features: feature_t
    @type num_features: int
    @type glyphs: set_t
    @returns: 
    @rtype: None
    """
    return object

def ot_shape_plan_collect_lookups(shape_plan=None, table_tag=None, lookup_indexes=None):
    """    
    @type shape_plan: shape_plan_t
    @type table_tag: tag_t
    @type lookup_indexes: set_t
    @returns: 
    @rtype: None
    """
    return object

def ot_tag_from_language(language=None):
    """    
    @type language: language_t
    @returns: 
    @rtype: tag_t
    """
    return object

def ot_tag_to_language(tag=None):
    """    
    @type tag: tag_t
    @returns: 
    @rtype: language_t
    """
    return object

def ot_tag_to_script(tag=None):
    """    
    @type tag: tag_t
    @returns: 
    @rtype: script_t
    """
    return object

def ot_tags_from_script(script=None, script_tag_1=None, script_tag_2=None):
    """    
    @type script: script_t
    @type script_tag_1: tag_t
    @type script_tag_2: tag_t
    @returns: 
    @rtype: None
    """
    return object

def ot_var_find_axis(face=None, axis_tag=None, axis_index=None, axis_info=None):
    """    
    @type face: face_t
    @type axis_tag: tag_t
    @type axis_index: int
    @type axis_info: ot_var_axis_t
    @returns: 
    @rtype: bool_t
    """
    return object

def ot_var_get_axes(face=None, start_offset=None, axes_count=None, axes_array=None):
    """    
    @type face: face_t
    @type start_offset: int
    @type axes_count: int
    @type axes_array: ot_var_axis_t
    @returns: 
    @rtype: int
    """
    return object

def ot_var_get_axis_count(face=None):
    """    
    @type face: face_t
    @returns: 
    @rtype: int
    """
    return object

def ot_var_has_data(face=None):
    """    This function allows to verify the presence of OpenType variation data on the face.
    Alternatively, use hb_ot_var_get_axis_count().
    @param face: #hb_face_t to test
    @type face: face_t
    @returns: true if face has a `fvar' table and false otherwise
    @rtype: bool_t
    """
    return object

def ot_var_normalize_coords(face=None, coords_length=None, design_coords=None, normalized_coords=None):
    """    
    @type face: face_t
    @type coords_length: int
    @type design_coords: float
    @type normalized_coords: int
    @returns: 
    @rtype: None
    """
    return object

def ot_var_normalize_variations(face=None, variations=None, variations_length=None, coords=None, coords_length=None):
    """    
    @type face: face_t
    @type variations: variation_t
    @type variations_length: int
    @type coords: int
    @type coords_length: int
    @returns: 
    @rtype: None
    """
    return object

def script_from_iso15924_tag(tag=None):
    """    Converts an ISO 15924 script tag to a corresponding #hb_script_t.
    @param tag: an #hb_tag_t representing an ISO 15924 tag.
    @type tag: tag_t
    @returns: An #hb_script_t corresponding to the ISO 15924 tag.
    @rtype: script_t
    """
    return object

def script_from_string(str=None, len=None):
    """    Converts a string @str representing an ISO 15924 script tag to a
    corresponding #hb_script_t. Shorthand for hb_tag_from_string() then
    hb_script_from_iso15924_tag().
    @param str: a string representing an       ISO 15924 tag.
    @param len: length of the @str, or -1 if it is %NULL-terminated.
    @type len: int
    @returns: An #hb_script_t corresponding to the ISO 15924 tag.
    @rtype: script_t
    """
    return object

def script_get_horizontal_direction(script=None):
    """    
    @type script: script_t
    @returns: 
    @rtype: direction_t
    """
    return object


class script_t:
    """"""
    COMMON = 1517910393
    INHERITED = 1516858984
    UNKNOWN = 1517976186
    ARABIC = 1098015074
    ARMENIAN = 1098018158
    BENGALI = 1113943655
    CYRILLIC = 1132032620
    DEVANAGARI = 1147500129
    GEORGIAN = 1197830002
    GREEK = 1198679403
    GUJARATI = 1198877298
    GURMUKHI = 1198879349
    HANGUL = 1214344807
    HAN = 1214344809
    HEBREW = 1214603890
    HIRAGANA = 1214870113
    KANNADA = 1265525857
    KATAKANA = 1264676449
    LAO = 1281453935
    LATIN = 1281455214
    MALAYALAM = 1298954605
    ORIYA = 1332902241
    TAMIL = 1415671148
    TELUGU = 1415933045
    THAI = 1416126825
    TIBETAN = 1416192628
    BOPOMOFO = 1114599535
    BRAILLE = 1114792297
    CANADIAN_SYLLABICS = 1130458739
    CHEROKEE = 1130915186
    ETHIOPIC = 1165256809
    KHMER = 1265134962
    MONGOLIAN = 1299148391
    MYANMAR = 1299803506
    OGHAM = 1332175213
    RUNIC = 1383427698
    SINHALA = 1399418472
    SYRIAC = 1400468067
    THAANA = 1416126817
    YI = 1500080489
    DESERET = 1148416628
    GOTHIC = 1198486632
    OLD_ITALIC = 1232363884
    BUHID = 1114990692
    HANUNOO = 1214344815
    TAGALOG = 1416064103
    TAGBANWA = 1415669602
    CYPRIOT = 1131442804
    LIMBU = 1281977698
    LINEAR_B = 1281977954
    OSMANYA = 1332964705
    SHAVIAN = 1399349623
    TAI_LE = 1415670885
    UGARITIC = 1432838514
    BUGINESE = 1114990441
    COPTIC = 1131376756
    GLAGOLITIC = 1198285159
    KHAROSHTHI = 1265131890
    NEW_TAI_LUE = 1415670901
    OLD_PERSIAN = 1483761007
    SYLOTI_NAGRI = 1400466543
    TIFINAGH = 1415999079
    BALINESE = 1113681001
    CUNEIFORM = 1483961720
    NKO = 1315663727
    PHAGS_PA = 1349017959
    PHOENICIAN = 1349021304
    CARIAN = 1130459753
    CHAM = 1130914157
    KAYAH_LI = 1264675945
    LEPCHA = 1281716323
    LYCIAN = 1283023721
    LYDIAN = 1283023977
    OL_CHIKI = 1332503403
    REJANG = 1382706791
    SAURASHTRA = 1398895986
    SUNDANESE = 1400204900
    VAI = 1449224553
    AVESTAN = 1098281844
    BAMUM = 1113681269
    EGYPTIAN_HIEROGLYPHS = 1164409200
    IMPERIAL_ARAMAIC = 1098018153
    INSCRIPTIONAL_PAHLAVI = 1349020777
    INSCRIPTIONAL_PARTHIAN = 1349678185
    JAVANESE = 1247901281
    KAITHI = 1265920105
    LISU = 1281979253
    MEETEI_MAYEK = 1299473769
    OLD_SOUTH_ARABIAN = 1398895202
    OLD_TURKIC = 1332898664
    SAMARITAN = 1398893938
    TAI_THAM = 1281453665
    TAI_VIET = 1415673460
    BATAK = 1113683051
    BRAHMI = 1114792296
    MANDAIC = 1298230884
    CHAKMA = 1130457965
    MEROITIC_CURSIVE = 1298494051
    MEROITIC_HIEROGLYPHS = 1298494063
    MIAO = 1349284452
    SHARADA = 1399353956
    SORA_SOMPENG = 1399812705
    TAKRI = 1415670642
    BASSA_VAH = 1113682803
    CAUCASIAN_ALBANIAN = 1097295970
    DUPLOYAN = 1148547180
    ELBASAN = 1164730977
    GRANTHA = 1198678382
    KHOJKI = 1265135466
    KHUDAWADI = 1399418468
    LINEAR_A = 1281977953
    MAHAJANI = 1298229354
    MANICHAEAN = 1298230889
    MENDE_KIKAKUI = 1298493028
    MODI = 1299145833
    MRO = 1299345263
    NABATAEAN = 1315070324
    OLD_NORTH_ARABIAN = 1315009122
    OLD_PERMIC = 1348825709
    PAHAWH_HMONG = 1215131239
    PALMYRENE = 1348562029
    PAU_CIN_HAU = 1348564323
    PSALTER_PAHLAVI = 1349020784
    SIDDHAM = 1399415908
    TIRHUTA = 1416196712
    WARANG_CITI = 1466004065
    AHOM = 1097363309
    ANATOLIAN_HIEROGLYPHS = 1215067511
    HATRAN = 1214346354
    MULTANI = 1299541108
    OLD_HUNGARIAN = 1215655527
    SIGNWRITING = 1399287415
    ADLAM = 1097100397
    BHAIKSUKI = 1114139507
    MARCHEN = 1298231907
    OSAGE = 1332963173
    TANGUT = 1415671399
    NEWA = 1315272545
    MASARAM_GONDI = 1198485101
    NUSHU = 1316186229
    SOYOMBO = 1399814511
    ZANABAZAR_SQUARE = 1516334690
    INVALID = 0

def script_to_iso15924_tag(script=None):
    """    See hb_script_from_iso15924_tag().
    @param script: an #hb_script_ to convert.
    @type script: script_t
    @returns: An #hb_tag_t representing an ISO 15924 script tag.
    @rtype: tag_t
    """
    return object

def segment_properties_equal(a=None, b=None):
    """    Checks the equality of two #hb_segment_properties_t's.
    @param a: first #hb_segment_properties_t to compare.
    @param b: second #hb_segment_properties_t to compare.
    @type a: segment_properties_t
    @type b: segment_properties_t
    @returns: %true if all properties of @a equal those of @b, false otherwise.
    @rtype: bool_t
    """
    return object

def segment_properties_hash(p=None):
    """    Creates a hash representing @p.
    @param p: #hb_segment_properties_t to hash.
    @type p: segment_properties_t
    @returns: A hash of @p.
    @rtype: int
    """
    return object

def set_add(set=None, codepoint=None):
    """    
    @param set: a set.
    @type set: set_t
    @type codepoint: codepoint_t
    @returns: 
    @rtype: None
    """
    return object

def set_add_range(set=None, first=None, last=None):
    """    
    @param set: a set.
    @type set: set_t
    @type first: codepoint_t
    @type last: codepoint_t
    @returns: 
    @rtype: None
    """
    return object

def set_allocation_successful(set=None):
    """    
    @param set: a set.
    @type set: set_t
    @returns: 
    @rtype: bool_t
    """
    return object

def set_clear(set=None):
    """    
    @param set: a set.
    @type set: set_t
    @returns: 
    @rtype: None
    """
    return object

def set_create():
    """    
    @returns: 
    @rtype: set_t
    """
    return object

def set_del(set=None, codepoint=None):
    """    
    @param set: a set.
    @type set: set_t
    @type codepoint: codepoint_t
    @returns: 
    @rtype: None
    """
    return object

def set_del_range(set=None, first=None, last=None):
    """    
    @param set: a set.
    @type set: set_t
    @type first: codepoint_t
    @type last: codepoint_t
    @returns: 
    @rtype: None
    """
    return object

def set_destroy(set=None):
    """    
    @param set: a set.
    @type set: set_t
    @returns: 
    @rtype: None
    """
    return object

def set_get_empty():
    """    
    @returns: 
    @rtype: set_t
    """
    return object

def set_get_max(set=None):
    """    Finds the maximum number in the set.
    @param set: a set.
    @type set: set_t
    @returns: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
    @rtype: codepoint_t
    """
    return object

def set_get_min(set=None):
    """    Finds the minimum number in the set.
    @param set: a set.
    @type set: set_t
    @returns: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
    @rtype: codepoint_t
    """
    return object

def set_get_population(set=None):
    """    Returns the number of numbers in the set.
    @param set: a set.
    @type set: set_t
    @returns: set population.
    @rtype: int
    """
    return object

def set_get_user_data(set=None, key=None):
    """    
    @param set: a set.
    @type set: set_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def set_has(set=None, codepoint=None):
    """    
    @param set: a set.
    @type set: set_t
    @type codepoint: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def set_intersect(set=None, other=None):
    """    
    @param set: a set.
    @type set: set_t
    @type other: set_t
    @returns: 
    @rtype: None
    """
    return object

def set_invert(set=None):
    """    
    @param set: a set.
    @type set: set_t
    @returns: 
    @rtype: None
    """
    return object

def set_is_empty(set=None):
    """    
    @param set: a set.
    @type set: set_t
    @returns: 
    @rtype: bool_t
    """
    return object

def set_is_equal(set=None, other=None):
    """    
    @param set: a set.
    @type set: set_t
    @type other: set_t
    @returns: 
    @rtype: bool_t
    """
    return object

def set_next(set=None, codepoint=None):
    """    
    @param set: a set.
    @type set: set_t
    @type codepoint: codepoint_t
    @returns: whether there was a next value.
    @rtype: bool_t
    """
    return object

def set_next_range(set=None, first=None, last=None):
    """    Gets the next consecutive range of numbers in @set that
    are greater than current value of @last.
    @param set: a set.
    @param first: output first codepoint in the range.
    @param last: input current last and output last codepoint in the range.
    @type set: set_t
    @type first: codepoint_t
    @type last: codepoint_t
    @returns: whether there was a next range.
    @rtype: bool_t
    """
    return object

def set_reference(set=None):
    """    
    @param set: a set.
    @type set: set_t
    @returns: 
    @rtype: set_t
    """
    return object

def set_set(set=None, other=None):
    """    
    @param set: a set.
    @type set: set_t
    @type other: set_t
    @returns: 
    @rtype: None
    """
    return object

def set_set_user_data(set=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param set: a set.
    @type set: set_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def set_subtract(set=None, other=None):
    """    
    @param set: a set.
    @type set: set_t
    @type other: set_t
    @returns: 
    @rtype: None
    """
    return object

def set_symmetric_difference(set=None, other=None):
    """    
    @param set: a set.
    @type set: set_t
    @type other: set_t
    @returns: 
    @rtype: None
    """
    return object

def set_union(set=None, other=None):
    """    
    @param set: a set.
    @type set: set_t
    @type other: set_t
    @returns: 
    @rtype: None
    """
    return object

def shape(font=None, buffer=None, features=None, num_features=None):
    """    Shapes @buffer using @font turning its Unicode characters content to
    positioned glyphs. If @features is not %NULL, it will be used to control the
    features applied during shaping.
    @param font: an #hb_font_t to use for shaping
    @param buffer: an #hb_buffer_t to shape
    @param features: an array of user    specified #hb_feature_t or %NULL
    @param num_features: the length of @features array
    @type font: font_t
    @type buffer: buffer_t
    @type num_features: int
    @returns: 
    @rtype: None
    """
    return object

def shape_full(font=None, buffer=None, features=None, num_features=None, shaper_list=None):
    """    See hb_shape() for details. If @shaper_list is not %NULL, the specified
    shapers will be used in the given order, otherwise the default shapers list
    will be used.
    @param font: an #hb_font_t to use for shaping
    @param buffer: an #hb_buffer_t to shape
    @param features: an array of user    specified #hb_feature_t or %NULL
    @param num_features: the length of @features array
    @param shaper_list: a %NULL-terminated    array of shapers to use or %NULL
    @type font: font_t
    @type buffer: buffer_t
    @type num_features: int
    @returns: false if all shapers failed, true otherwise
    @rtype: bool_t
    """
    return object

def shape_list_shapers():
    """    Retrieves the list of shapers supported by HarfBuzz.
    @rtype: None
    """
    return object

def shape_plan_create(face=None, props=None, user_features=None, num_user_features=None, shaper_list=None):
    """    
    @type face: face_t
    @type props: segment_properties_t
    @type num_user_features: int
    @returns: 
    @rtype: shape_plan_t
    """
    return object

def shape_plan_create2(face=None, props=None, user_features=None, num_user_features=None, coords=None, num_coords=None, shaper_list=None):
    """    
    @type face: face_t
    @type props: segment_properties_t
    @type user_features: feature_t
    @type num_user_features: int
    @type coords: int
    @type num_coords: int
    @type shaper_list: str
    @returns: 
    @rtype: shape_plan_t
    """
    return object

def shape_plan_create_cached(face=None, props=None, user_features=None, num_user_features=None, shaper_list=None):
    """    
    @type face: face_t
    @type props: segment_properties_t
    @type num_user_features: int
    @returns: 
    @rtype: shape_plan_t
    """
    return object

def shape_plan_create_cached2(face=None, props=None, user_features=None, num_user_features=None, coords=None, num_coords=None, shaper_list=None):
    """    
    @type face: face_t
    @type props: segment_properties_t
    @type user_features: feature_t
    @type num_user_features: int
    @type coords: int
    @type num_coords: int
    @type shaper_list: str
    @returns: 
    @rtype: shape_plan_t
    """
    return object

def shape_plan_destroy(shape_plan=None):
    """    
    @param shape_plan: a shape plan.
    @type shape_plan: shape_plan_t
    @returns: 
    @rtype: None
    """
    return object

def shape_plan_execute(shape_plan=None, font=None, buffer=None, features=None, num_features=None):
    """    
    @param shape_plan: a shape plan.
    @param font: a font.
    @param buffer: a buffer.
    @type shape_plan: shape_plan_t
    @type font: font_t
    @type buffer: buffer_t
    @type num_features: int
    @returns: 
    @rtype: bool_t
    """
    return object

def shape_plan_get_empty():
    """    
    @returns: 
    @rtype: shape_plan_t
    """
    return object

def shape_plan_get_shaper(shape_plan=None):
    """    
    @param shape_plan: a shape plan.
    @type shape_plan: shape_plan_t
    @returns: 
    @rtype: str
    """
    return object

def shape_plan_get_user_data(shape_plan=None, key=None):
    """    
    @param shape_plan: a shape plan.
    @type shape_plan: shape_plan_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def shape_plan_reference(shape_plan=None):
    """    
    @param shape_plan: a shape plan.
    @type shape_plan: shape_plan_t
    @returns: 
    @rtype: shape_plan_t
    """
    return object

def shape_plan_set_user_data(shape_plan=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param shape_plan: a shape plan.
    @type shape_plan: shape_plan_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def tag_from_string(str=None, len=None):
    """    
    @type len: int
    @returns: 
    @rtype: tag_t
    """
    return object

def tag_to_string(tag=None, buf=None):
    """    
    @type tag: tag_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_combining_class(ufuncs=None, unicode=None):
    """    
    @type ufuncs: unicode_funcs_t
    @type unicode: codepoint_t
    @returns: 
    @rtype: unicode_combining_class_t
    """
    return object


class unicode_combining_class_t:
    """"""
    NOT_REORDERED = 0
    OVERLAY = 1
    NUKTA = 7
    KANA_VOICING = 8
    VIRAMA = 9
    CCC10 = 10
    CCC11 = 11
    CCC12 = 12
    CCC13 = 13
    CCC14 = 14
    CCC15 = 15
    CCC16 = 16
    CCC17 = 17
    CCC18 = 18
    CCC19 = 19
    CCC20 = 20
    CCC21 = 21
    CCC22 = 22
    CCC23 = 23
    CCC24 = 24
    CCC25 = 25
    CCC26 = 26
    CCC27 = 27
    CCC28 = 28
    CCC29 = 29
    CCC30 = 30
    CCC31 = 31
    CCC32 = 32
    CCC33 = 33
    CCC34 = 34
    CCC35 = 35
    CCC36 = 36
    CCC84 = 84
    CCC91 = 91
    CCC103 = 103
    CCC107 = 107
    CCC118 = 118
    CCC122 = 122
    CCC129 = 129
    CCC130 = 130
    CCC133 = 132
    ATTACHED_BELOW_LEFT = 200
    ATTACHED_BELOW = 202
    ATTACHED_ABOVE = 214
    ATTACHED_ABOVE_RIGHT = 216
    BELOW_LEFT = 218
    BELOW = 220
    BELOW_RIGHT = 222
    LEFT = 224
    RIGHT = 226
    ABOVE_LEFT = 228
    ABOVE = 230
    ABOVE_RIGHT = 232
    DOUBLE_BELOW = 233
    DOUBLE_ABOVE = 234
    IOTA_SUBSCRIPT = 240
    INVALID = 255

def unicode_compose(ufuncs=None, a=None, b=None, ab=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @type a: codepoint_t
    @type b: codepoint_t
    @type ab: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def unicode_decompose(ufuncs=None, ab=None, a=None, b=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @type ab: codepoint_t
    @type a: codepoint_t
    @type b: codepoint_t
    @returns: 
    @rtype: bool_t
    """
    return object

def unicode_decompose_compatibility(ufuncs=None, u=None, decomposed=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @type u: codepoint_t
    @type decomposed: codepoint_t
    @returns: 
    @rtype: int
    """
    return object

def unicode_eastasian_width(ufuncs=None, unicode=None):
    """    
    @type ufuncs: unicode_funcs_t
    @type unicode: codepoint_t
    @returns: 
    @rtype: int
    """
    return object

def unicode_funcs_create(parent=None):
    """    
    @type parent: unicode_funcs_t
    @returns: 
    @rtype: unicode_funcs_t
    """
    return object

def unicode_funcs_destroy(ufuncs=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_get_default():
    """    
    @returns: 
    @rtype: unicode_funcs_t
    """
    return object

def unicode_funcs_get_empty():
    """    
    @returns: 
    @rtype: unicode_funcs_t
    """
    return object

def unicode_funcs_get_parent(ufuncs=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @returns: 
    @rtype: unicode_funcs_t
    """
    return object

def unicode_funcs_get_user_data(ufuncs=None, key=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @type key: user_data_key_t
    @returns: 
    @rtype: gpointer
    """
    return object

def unicode_funcs_is_immutable(ufuncs=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @returns: 
    @rtype: bool_t
    """
    return object

def unicode_funcs_make_immutable(ufuncs=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_reference(ufuncs=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @returns: 
    @rtype: unicode_funcs_t
    """
    return object

def unicode_funcs_set_combining_class_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_combining_class_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_compose_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_compose_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_decompose_compatibility_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_decompose_compatibility_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_decompose_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_decompose_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_eastasian_width_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_eastasian_width_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_general_category_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_general_category_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_mirroring_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_mirroring_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_script_func(ufuncs=None, func=None, user_data=None, destroy=None):
    """    
    @param ufuncs: a Unicode function structure
    @type ufuncs: unicode_funcs_t
    @type func: unicode_script_func_t
    @type user_data: gpointer
    @type destroy: destroy_func_t
    @returns: 
    @rtype: None
    """
    return object

def unicode_funcs_set_user_data(ufuncs=None, key=None, data=None, destroy=None, replace=None):
    """    
    @param ufuncs: Unicode functions.
    @type ufuncs: unicode_funcs_t
    @type key: user_data_key_t
    @type data: gpointer
    @type destroy: destroy_func_t
    @type replace: bool_t
    @returns: 
    @rtype: bool_t
    """
    return object

def unicode_general_category(ufuncs=None, unicode=None):
    """    
    @type ufuncs: unicode_funcs_t
    @type unicode: codepoint_t
    @returns: 
    @rtype: unicode_general_category_t
    """
    return object


class unicode_general_category_t:
    """"""
    CONTROL = 0
    FORMAT = 1
    UNASSIGNED = 2
    PRIVATE_USE = 3
    SURROGATE = 4
    LOWERCASE_LETTER = 5
    MODIFIER_LETTER = 6
    OTHER_LETTER = 7
    TITLECASE_LETTER = 8
    UPPERCASE_LETTER = 9
    SPACING_MARK = 10
    ENCLOSING_MARK = 11
    NON_SPACING_MARK = 12
    DECIMAL_NUMBER = 13
    LETTER_NUMBER = 14
    OTHER_NUMBER = 15
    CONNECT_PUNCTUATION = 16
    DASH_PUNCTUATION = 17
    CLOSE_PUNCTUATION = 18
    FINAL_PUNCTUATION = 19
    INITIAL_PUNCTUATION = 20
    OTHER_PUNCTUATION = 21
    OPEN_PUNCTUATION = 22
    CURRENCY_SYMBOL = 23
    MODIFIER_SYMBOL = 24
    MATH_SYMBOL = 25
    OTHER_SYMBOL = 26
    LINE_SEPARATOR = 27
    PARAGRAPH_SEPARATOR = 28
    SPACE_SEPARATOR = 29

def unicode_mirroring(ufuncs=None, unicode=None):
    """    
    @type ufuncs: unicode_funcs_t
    @type unicode: codepoint_t
    @returns: 
    @rtype: codepoint_t
    """
    return object

def unicode_script(ufuncs=None, unicode=None):
    """    
    @type ufuncs: unicode_funcs_t
    @type unicode: codepoint_t
    @returns: 
    @rtype: script_t
    """
    return object

def variation_from_string(str=None, len=None, variation=None):
    """    
    @type str: str
    @type len: int
    @type variation: variation_t
    @returns: 
    @rtype: bool_t
    """
    return object

def variation_to_string(variation=None, buf=None, size=None):
    """    
    @type variation: variation_t
    @type buf: str
    @type size: int
    @returns: 
    @rtype: None
    """
    return object

def version(major=None, minor=None, micro=None):
    """    Returns library version as three integer components.
    @param major: Library major version component.
    @param minor: Library minor version component.
    @param micro: Library micro version component.
    @type major: int
    @type minor: int
    @type micro: int
    @returns: 
    @rtype: None
    """
    return object

def version_atleast(major=None, minor=None, micro=None):
    """    
    @type major: int
    @type minor: int
    @type micro: int
    @returns: 
    @rtype: bool_t
    """
    return object

def version_check(major=None, minor=None, micro=None):
    """    
    @type major: int
    @type minor: int
    @type micro: int
    @returns: 
    @rtype: bool_t
    """
    return object

def version_string():
    """    Returns library version as a string with three components.
    @returns: library version string.
    @rtype: str
    """
    return object


class blob_t():
    """"""


class buffer_t():
    """The main structure holding the input text and its properties before shaping,
and output glyphs and their information after shaping."""


class face_t():
    """"""


class feature_t():
    """"""
    
    def _string(self, buf=None, size=None):
        """        Converts a #hb_feature_t into a %NULL-terminated string in the format
        understood by hb_feature_from_string(). The client in responsible for
        allocating big enough size for @buf, 128 bytes is more than enough.
        @param buf: output string
        @param size: the allocated size of @buf
        @type size: int
        @returns: 
        @rtype: None
        """
        return object

    @property
    def tag(self):
        return object

    @property
    def value(self):
        return object

    @property
    def start(self):
        return object

    @property
    def end(self):
        return object


class font_extents_t():
    """"""

    @property
    def ascender(self):
        return object

    @property
    def descender(self):
        return object

    @property
    def line_gap(self):
        return object

    @property
    def reserved9(self):
        return object

    @property
    def reserved8(self):
        return object

    @property
    def reserved7(self):
        return object

    @property
    def reserved6(self):
        return object

    @property
    def reserved5(self):
        return object

    @property
    def reserved4(self):
        return object

    @property
    def reserved3(self):
        return object

    @property
    def reserved2(self):
        return object

    @property
    def reserved1(self):
        return object


class font_funcs_t():
    """"""


class font_t():
    """"""


class glyph_extents_t():
    """"""

    @property
    def x_bearing(self):
        return object

    @property
    def y_bearing(self):
        return object

    @property
    def width(self):
        return object

    @property
    def height(self):
        return object


class glyph_info_t():
    """The #hb_glyph_info_t is the structure that holds information about the
glyphs and their relation to input text."""

    @property
    def codepoint(self):
        return object

    @property
    def mask(self):
        return object

    @property
    def cluster(self):
        return object

    @property
    def var1(self):
        return object

    @property
    def var2(self):
        return object


class glyph_position_t():
    """The #hb_glyph_position_t is the structure that holds the positions of the
glyph in both horizontal and vertical directions. All positions in
#hb_glyph_position_t are relative to the current point."""

    @property
    def x_advance(self):
        return object

    @property
    def y_advance(self):
        return object

    @property
    def x_offset(self):
        return object

    @property
    def y_offset(self):
        return object

    @property
    def var(self):
        return object


class language_t():
    """"""
    
    def _string(self):
        """        See hb_language_from_string().
        @returns: A %NULL-terminated string representing the @language. Must not be freed by the caller.
        @rtype: str
        """
        return object


class ot_math_glyph_part_t():
    """"""

    @property
    def glyph(self):
        return object

    @property
    def start_connector_length(self):
        return object

    @property
    def end_connector_length(self):
        return object

    @property
    def full_advance(self):
        return object

    @property
    def flags(self):
        return object


class ot_math_glyph_variant_t():
    """"""

    @property
    def glyph(self):
        return object

    @property
    def advance(self):
        return object


class ot_var_axis_t():
    """"""

    @property
    def tag(self):
        return object

    @property
    def name_id(self):
        return object

    @property
    def min_value(self):
        return object

    @property
    def default_value(self):
        return object

    @property
    def max_value(self):
        return object


class segment_properties_t():
    """The structure that holds various text properties of an #hb_buffer_t. Can be
set and retrieved using hb_buffer_set_segment_properties() and
hb_buffer_get_segment_properties(), respectively."""

    @property
    def direction(self):
        return object

    @property
    def script(self):
        return object

    @property
    def language(self):
        return object

    @property
    def reserved1(self):
        return object

    @property
    def reserved2(self):
        return object


class set_t():
    """"""


class shape_plan_t():
    """"""


class unicode_funcs_t():
    """"""


class user_data_key_t():
    """"""

    @property
    def unused(self):
        return object


class variation_t():
    """"""
    
    def _string(self, buf=None, size=None):
        """        
        @type buf: str
        @type size: int
        @returns: 
        @rtype: None
        """
        return object

    @property
    def tag(self):
        return object

    @property
    def value(self):
        return object
